package models

import (
	"time"

	"gorm.io/datatypes"
)

// ConsumerProtocol 定义消费者协议常量 (模拟 ENUM)
type ConsumerProtocol string

const (
	ProtocolWebsocket   ConsumerProtocol = "websocket"
	ProtocolHTTPWebhook ConsumerProtocol = "http_webhook"
	ProtocolUDP         ConsumerProtocol = "udp"
)

// Consumer 存储活跃/注册的 Consumer 信息
type Consumer struct {
	// 不使用 gormModel 的 Id，因为主键是 ConsumerID (VARCHAR)
	ConsumerID     string           `gorm:"type:varchar(255);primaryKey" json:"consumer_id"` // 主键
	Protocol       ConsumerProtocol `gorm:"type:varchar(50);not null;index" json:"protocol"` // 使用 string 存储协议
	ConnectionInfo datatypes.JSON   `gorm:"type:jsonb" json:"connection_info"`
	AuthKeyID      uint             `gorm:"not null;index" json:"auth_key_id"` // 外键字段，非空
	Status         string           `gorm:"type:varchar(50);not null;default:'connected';index" json:"status"`
	RegisteredAt   time.Time        `json:"registered_at"`             // 手动添加时间戳
	LastSeenAt     time.Time        `gorm:"index" json:"last_seen_at"` // 手动添加时间戳并加索引
	CreatedAt      time.Time        `json:"created_at"`                // 手动添加时间戳
	UpdatedAt      time.Time        `json:"updated_at"`                // 手动添加时间戳
	// DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` // 如果需要软删除

	// --- 关联关系 ---
	// 移除有问题的 AuthKey 关联
	// AuthKey AuthKey `gorm:"foreignKey:AuthKeyID;references:Id"`

	// 一个 Consumer 可以订阅多个 Topic
	Subscriptions []ConsumerSubscription `gorm:"foreignKey:ConsumerID;references:ConsumerID"` // 确保 references 指向本结构的 ConsumerID
}

// TableName 自定义表名
func (Consumer) TableName() string {
	return "consumers"
}
